//
//  Root.swift
//  GroupPattern
//
//  Created by mac on 2017/11/15.
//  Copyright © 2017年 RRC. All rights reserved.
//

import Foundation

//根节点接口
protocol IRoot {
    //得到总经理的信息
    func getInfo() -> String
    //总经理下边要有小兵，那要能增加小兵，比如研发部总经理，这是个树枝节点
    func add(branch:IBranch)
    //那要能增加树叶节点
    func add(leaf:ILeaf)
    //既然能增加，那还要能够遍历，不可能总经理不知道他手下有哪些人
    func getSubordinateInfo<T>() -> [T]
}

//根节点的实现
public class Root:IRoot {
    ///保存根节点下的树枝节点种树叶节点
    private var subordinateList = [Any]()
    ///根节点我名称
    private var name = ""
    ///根节点的职位
    private var position = ""
    ///根节点的薪水
    private var salary = 0
    //通过构造函数传递进来总经理的信息
    init(name:String, position:String, salary:Int) {
        self.name = name
        self.position = position
        self.salary = salary
    }
    //得到自己的信息
    func getInfo() -> String {
        var info = ""
        info = "名称："+self.name
        info = info + "\t职位："+self.position
        info = info + "\t薪水：\(self.salary)"
        return info
    }
    //增加树枝节点
    func add(branch: IBranch) {
        self.subordinateList.append(branch)
    }
    //增加叶子节点，比如秘书，直接隶属于总经理
    func add(leaf: ILeaf) {
        self.subordinateList.append(leaf)
    }
    //得到下级的信息
    func getSubordinateInfo<T>() -> [T] {
        return self.subordinateList as! [T]
    }

}
